2017-12-17 10 views
2

を無視重複削除リストを作成し、新しいリストを取得します。 マイコード:LINQのは、私はそれから重複を削除するこの</p> <blockquote> <p>するvar A = {アップル、オレンジ、スイカ、リンゴ、オレンジ、アップル}</p> のような例リストデータに</blockquote> <p>を持っている場合

var b = a.GroupBy(x => x).Where(y => y.Count() >= 1).Select(z => z.Key).ToList(); 

が、それは、異なるケースを取り除くためにどのよう

するvar B = {アップル、リンゴ、リンゴ、オレンジ、スイカ}

を返しますか?優れたフィルタリングシステムのように、アップルは1つだけです。

a.GroupBy(x => x, StringComparer.OrdinalIgnoreCase).Select... 

CurrentCultureIgnoreCaseInvariantCultureIgnoreCaseOrdinalIgnoreCaseを含む利用可能な複数のオプションがあります:IEqualityComparer<T>は、StringComparerはこれを実装し、標準の事前設定されたオプションを提供している場合

答えて

2

GroupByは、実装を受け入れます。

詳細:

using System.Linq; 
using System; 

public class Program 
{ 
    public static void Main() 
    { 
     var a = new[]{"Apple", "Orange", "WaterMelon", "ApplE", "Orange", "APple"}; 
     var b = a.Where(x => a.Count(i => i.Equals(x, StringComparison.OrdinalIgnoreCase)) == 1); 

     System.Console.WriteLine(string.Join(",", b)); 
    } 
} 

出力(大文字と小文字を区別):あなたは、ケーシングを尊重せずにそれらを取得したい場合は

// using System.Linq; 

var a = new[]{"Apple", "Orange", "WaterMelon", "ApplE", "Orange", "APple"}; 
var b = a.Where(x => a.Count(i => i == x) == 1); 

https://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase(v=vs.110).aspx

+0

正常に動作します。ありがとう。しかし、私はGroupByで実装を追加できることを認識しています。別の関数ですか? –

+0

IEqualityComparerを実装している関数またはデリゲート。これをEntityFrameworkまたは他のLinqプロバイダに渡すと、フレームワークのデフォルトの実装の一部に固執するのが最善です。 – jessehouwing

0

これはケーシング尊重し、それをフィルタします

Apple,WaterMelon,ApplE,APple 

出力(無反応):

WaterMelon 
-1

あなたがキーと値として文字列としての下に文字列を追加した辞書を使用することができます。

List<string> mylist = new List<string> { "app", "App", "zz", "zZ" }; 
      Dictionary<string, string> dict = new Dictionary<string, string>(); 
      string key = string.Empty; 
      foreach(string c in mylist) 
      { 
       key = c.ToLower(); 
       if(!dict.Keys.Contains(key)) 
       { 
        dict.Add(key, c); 
       } 
      } 
      var t = dict.Values; 
関連する問題

 関連する問題