2016-07-25 3 views
-2

私は複数回反復しているリストを持っています。それはアイテムとしてrangenameを持っています。私の要件は、このリストの任意のインデックスの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 
} 

}エラーを与えている

。リストのアイテムの1つのインデックス値を同じリストのすべてのインデックスと比較する方法

答えて

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のアクションを一度実行し、そのアクションが何度も実行することができます。アクションを1回だけ実行したい場合は、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

感謝を。範囲はString型です。var z =は何でしょうか? – Ram

+0

var z = ...とは何ですか? – Ram

+0

@Ram私はあなたが最初から特定の 'z'を持っていると思いましたか?私は誤解しているかもしれません。 –

0

は、次の2つの範囲はあなたのリストが等しいとき、いくつかのアクションを実行します。次はあなたのために働くはずです。

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

関連する問題