如何比较列表项的索引值与同一列表的所有索引
问题描述:
我有一个迭代多次的列表。它将范围名称作为项目。我的要求是当这个列表的任何索引处的rangename等于某个其他索引处的rangename时,执行一个动作。我正在使用下面的代码。如何比较列表项的索引值与同一列表的所有索引
var bList = new List<Budget.budget_data>();
for (int z = 0; z < bList.Count; z++)
{
if (bList [z].Range == bList.Where(a => bList.Any(x => x.Range ==x.Range)))
{
//need to perform action
}
}
即给予错误。如何将列表项目的一个索引值与同一列表上的所有索引进行比较。
答
不太清楚问,我的感觉,但你可以试试这个:
var bList = new List<Budget.budget_data>();
// ...
var z = ...;
for (var x = 0; x < bList.Count; ++x)
{
if (x == z)
continue;
if (bList[z].Range == bList[x].Range)
{
//need to perform action
}
}
这所执行的操作一次的针对其存在匹配指数x
,这样的动作可以运行许多倍。如果您只想执行一个操作,则可以用break;
语句完成if
块(完全退出循环)。
注意:这里假定.Range
的类型是这样的,使用==
是合理的。什么是.Range
的申报类型?
我可能误解了这个问题。如果要确定是否有任何重复所有,您可以:
var bList = new List<Budget.budget_data>();
// ...
var uniqueRangeValues = new HashSet<string>();
foreach (var b in bList)
{
if (!uniqueRangeValues.Add(b.Ranges))
{
// perform action
break; // omit if you want to perform the action several times
}
}
答
从我从你的问题理解,要在两个范围,您的列表等于执行一些动作。以下应该为你工作。
var bList = new List<Budget.budget_data>();
for (var i = 0; i < bList.Count; i++)
{
for (var j = i + 1; j < bList.Count; j++)
{
if (bList[i].Range == bList[j].Range)
{
//Perform your action
}
}
}
这如果在列表中的任何重复范围将执行你的行动。
答
听起来就像你试图找到重复的东西,但没有清楚地知道你正在努力实现它的困难,以帮助你找到解决问题的充分办法。
使用您提供的一些细节,下面是循环遍历重复项的通用解决方案。
public static void Main()
{
var budgets = new List<Budget>()
{
new Budget(){ Id = 1, Range = "A" },
new Budget(){ Id = 2, Range = "B" },
new Budget(){ Id = 3, Range = "C" },
new Budget(){ Id = 4, Range = "C" },
new Budget(){ Id = 5, Range = "A" }
};
var duplicateBudgetGroups = budgets.GroupBy(budget => budget.Range).Where(group => group.Count() > 1);
foreach (var duplicateBudgets in duplicateBudgetGroups)
{
Console.WriteLine("Duplicate Range {0}", duplicateBudgets.Key);
foreach (var budget in duplicateBudgets)
{
Console.WriteLine("Budget {{ Id = {0}, Range = {1} }}", budget.Id.ToString(), budget.Range);
}
}
}
class Budget {
public int Id { get; set; }
public string Range { get; set; }
}
我已经添加了这dotnetfiddle所以你可以看到它的工作:https://dotnetfiddle.net/65gF6f
感谢您的答复。范围是字符串类型。什么应该是var z =? – Ram
什么是var z = ...? – Ram
@Ram我以为你从一开始就有一个特定的'z'?我可能误解了。 –