この記事について
拡張メソッドの備忘録、兼、共有のための記事です。
この記事は、追記したり、グルーピングしたり、常に編集するつもりです。
2019.1.9 ContainsDuplicate() , GetDuplicateArray() を追記
区切り文字を含むstring文字列を、List形式にする
改行コードで分割したList形式にする
複数文字列で文字列を分割する場合は、この形式
static class Extensions
{
private static string[] stringCRLFSeparator = { "\r\n", "\n\r", "\r", "\n" };
public static List<string> SplitCRLF(this string listString)
{
return listString
.Split(stringCRLFSeparator , StringSplitOptions.RemoveEmptyEntries)
.ToList();
}
}
参考:【C#入門】String.Splitで文字列を分割(複数文字、文字数でも分割)
参考:下記のsoiさんのコメント(2018/8/29) // 記法をコンパクト化
参考:下記のalbireoさんのコメント(2018/8/31) // 分割文字列をstaticにしてnewを廃止
カンマで分割したList形式にする
1文字で文字列を分割する場合は、この形式(char)
static class Extensions
{
private static char[] stringCommaSeparator = { ',' };
public static List<string> SplitComma(this string listString)
{
return listString
.Split(stringCommaSeparator, StringSplitOptions.RemoveEmptyEntries)
.ToList();
}
}
参考:下記のsoiさんのコメント(2018/8/29) // 記法をコンパクト化
参考:下記のalbireoさんのコメント(2018/8/31) // 分割文字列をstaticにしてnewを廃止
※リストとしても配列としても使いたい場合
戻り値の型を「IList<string>
」にし、拡張メソッド内でList型に変換していた「ToList()
」を削除
static class Extentions
{
private static char[] stringCommaSeparator = { ',' };
public static IList<string> SplitComma(this string listString)
{
return listString
.Split(stringCommaSeparator, StringSplitOptions.RemoveEmptyEntries);
}
}
// 使い方
string sampleString = "view,viewmodel,model";
string[] array = sampleString.SplitComma().ToArray(); // 配列にしたい場合は、呼び出し側で .ToArray()を付ける
List<string> list = sampleString.SplitComma().ToList(); // リストにしたい場合、呼び出し側で .ToList()を付ける
参考:下記のalbireoさんのコメント
参考:2つの文字列が等しいかを調べる 大文字小文字、半角全角、ひらがなカタカナの区別をしないで文字列を比較する
Listに、大文字小文字を区別しないContains()関数を付ける
List
string[]
Dictionary.Keys (string型のKey)
Dictionary.Values (string型のValue)
など、どれでも使用可能です。
static class Extensions
{
public static bool ContainsIgnoreCase(this IEnumerable<string> list, string target)
{
foreach (string obj in list)
{
if (String.Compare(obj, target, true) == 0)
{
return true;
}
}
return false; // 見つからなかった
}
}
参考:大文字/小文字を区別しないで文字列を比較するには?
参考:下記のalbireoさんのコメント(2018/8/31) thisの型をIEnumerableに変更
CollectionにAddRange()を追加する
static class Extensions
{
public static void AddRange<T>(this ICollection<T> collection, ICollection<T> target)
{
foreach (var item in target)
{
collection.Add(item);
}
}
}
ObservableCollectionに、AddRange()を使いたかった...。
参考:なにか参考にした気がするのですが、失念しました。
リスト内に重複があるかチェックする
参考にしたサイトのかたの見解では、パフォーマンスに問題あるので、ご利用は計画的にとのことです。
static class Extensions
{
public static bool ContainsDuplicate(this IEnumerable<string> source)
{
return source.GroupBy(i => i).SelectMany(g => g.Skip(1)).Any();
}
}
コレクションの中から重複している要素を返す
重複している要素が複数あるかも知れないので、List形式で返します。
static class Extensions
{
public static IEnumerable<string> GetDuplicateArray(this IEnumerable<string> source)
{
return source.GroupBy(i => i).SelectMany(g => g.Skip(1));
}
}
参考:たぶん、上のContainsDuplicate()を作った時に、.Any() を削除してみて作ったのだと思います。