2016-07-25 72 views
-2

我有一個迭代多次的列表。它將範圍名稱作爲項目。我的要求是當這個列表的任何索引處的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 
} 

}

即給予錯誤。如何將列表項目的一個索引值與同一列表上的所有索引進行比較。

回答

0

不太清楚問,我的感覺,但你可以試試這個:

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 
    } 
} 
+0

感謝您的答覆。範圍是字符串類型。什麼應該是var z =? – Ram

+0

什麼是var z = ...? – Ram

+0

@Ram我以爲你從一開始就有一個特定的'z'?我可能誤解了。 –

0

從我從你的問題理解,要在兩個範圍,您的列表等於執行一些動作。以下應該爲你工作。

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 
       } 
      } 
     } 

這如果在列表中的任何重複範圍將執行你的行動。

0

聽起來就像你試圖找到重複的東西,但沒有清楚地知道你正在努力實現它的困難,以幫助你找到解決問題的充分辦法。

使用您提供的一些細節,下面是循環遍歷重複項的通用解決方案。

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

相關問題