3

文字列では、リスト内の任意の項目からの最初の一致に基づいて、7 文字の部分文字列を復元する必要があります。一致しない場合は、空の文字列を返す必要があります。

次のコードがあります。

List<string> myList = new List<string>()
{
    "TNCO",
    "TNCB",
    "TNIT"
};
string sample = "TNSD102, WHRK301, TNIT301, YTRE234";

//doesn't give an index
bool anyfound = myList.Any(w => sample.Contains(w));

//code that needs replacing
string code = sample.Substring(sample.IndexOf("TNC"), 7);
if (code == "")
{
    code = sample.Substring(sample.IndexOf("TNIT"), 7);
}

リストが 35 ~ 40 項目を超え、文字列が 50 文字未満になることはまずありません。

誰でも私を正しい方向に向けることができますか?

4

5 に答える 5

2
string val1 = (sample.Split(',').FirstOrDefault(w => myList.Any(m => w.Contains(m))) ?? string.Empty).Trim();
于 2013-02-27T22:58:54.427 に答える
1

これにより、すべての一致の IEnumerable が得られます。

var matches = from code in sample.Split(',')
              from w in myList
              where code.Trim().StartsWith(w)
              select code;

最初の値を取得するには、FirstOrDefault を使用します。次に、合体演算子を使用して、??一致がない場合は空の文字列を返します。

string firstMatch = (matches.FirstOrDefault() ?? "").Trim();
于 2013-02-27T22:55:42.477 に答える
0
List<string> myList = new List<string> { "TNCO", "TNCB", "TNIT" };
string sample = "TNSD102, WHRK301, TNIT301, YTRE234";
string[] sampleItems = sample.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);

var results = myList
    .Select(prefix => sampleItems
        .FirstOrDefault(item => item.StartsWith(prefix)) ?? "");
于 2013-02-27T22:59:15.910 に答える
0

このように小さいデータ セットを使用すると、単純に文字列を分割して最初の一致を検索できます。

// split the sample string into separate entries
var entries = sample.Split(new char[] {',', ' '},
    StringSplitOptions.RemoveEmptyEntries);

// find the first entry starting with any allowed prefix
var firstMatch = entries.FirstOrDefault (
    e => myList.Any (l => e.StartsWith(l)));

// FirstOrDefault returns null if there are no matches
if (firstMatch == null)
    Console.WriteLine("No match!");
else
    Console.WriteLine(firstMatch);

出力例 ( DEMO ):

TNIT301
于 2013-02-27T22:49:11.263 に答える
0

ここでこのコードを実行すると、探しているものに基づいて 2 のインデックスが返されます。

int keyIndex = myList.FindIndex(w => samples.Contains(w));

TNIT301これはインデックス付きの文字列値です

keyIndex次のようにして、変数値のインデックス位置に文字列値を返すこともできます。

var subStrValue = samples.Split(',')[keyIndex];
于 2013-02-27T22:56:42.887 に答える