1

アイテムを追加するリストコントロールがあります。比較するためのsayListの別の一般的なリストがあり、Listコントロールの項目を比較したいのですが、一致するものが見つかった場合は、別のlistsaylistに含めたくありません。

foreach( S s1 in S_list)
{
    if (ex.Count > 0)  // If list not empmty
    {
        foreach(Ex li in ex)  // 
        {
            if (s1.Name.Equals(li.ToString()))
            {
                flag=true;
                ex.Add(s1.Name);
            }
        }
    }
    else
    {
        ex.Add(s1.Name);
    }
}

問題は次のとおりです。

私の元リストで重複を引き起こしていますが、それをどのように行うのですか?

4

1 に答える 1

1

あなたが何を達成しようとしているのか理解できませんが、このコードは私には疑わしいようです。

foreach(Ex li in ex)  // 
{
    if (s1.Name.Equals(li.ToString()))
    {
        flag=true;
        ex.Add(s1.Name);
    }
}

それで、s1.Nameリストに同じ要素が見つかるたびにリストに追加しますか?この方法でexは、最初に追加された要素と等しい要素が入力されます。

おそらくこのようなものが仕事をするでしょう:

foreach( S s1 in S_list)
{
    boolean foundInEx = false;
    foreach(Ex li in ex)  // 
    {
        if (s1.Name.Equals(li.ToString()))
        {
            foundInEx = true;
            break;
        }
    }
    if(!foundInEx) 
    {
        ex.Add(s1.Name); //only executed when there is no such element in ex
    }
}

LINQカウントを使用するより短い方法:

foreach( S s1 in S_list)
{
    if(ex.Count(li => s1.Name.Equals(li.ToString()))>0) 
    {
        ex.Add(s1.Name); //only executed when there is no such element in ex
    }
}

また、リストから一意の要素を取得する場合は、 LINQDistinctを使用できます。

var uniqueNames = S_list.Select(x => x.Name).Distinct();
于 2013-03-26T04:41:30.280 に答える