3

配列から最初の3文字だけの文字列のインデックスを探したい

私は月の配列を持っています

string[] arrayEnglishMonth = { "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" };

私が書いたら

     int t_ciMonth=8;(AUGUST)
     int pos = Array.IndexOf(t_caMonth, arrayEnglishMonth[t_ciMonth - 1]);

しかし、最初の 3 文字のみ、つまり AUG のインデックスが必要な場合は、どうすればそれを見つけることができますか?

4

6 に答える 6

5
arrayEnglishMonth.ToList().FindIndex(s => s.Substring(0,3) == "AUG");
于 2013-08-05T06:38:43.683 に答える
2

少しのLinqでこれを行うことができます:

string[] arrayEnglishMonth = { "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" };
string[] t_caMonth = { ... };
string search = arrayEnglishMonth[7].Substring(0, 3); // "AUG";
int pos = t_caMonth
    .Select((s, i) => new { s, i }).Dump()
    .Where(x => x.s == search)
    .Select(x => x.i)
    .DefaultIfEmpty(-1).First();

またはもっと簡単に:

int pos = t_caMonth.TakeWhile(s => s != search).Count();

一致する要素が見つからない場合のt_caMonth.Length代わりに、この最後のソリューションが返されます。-1

于 2013-08-05T06:32:42.337 に答える
0

t_caMonth大文字で、値が 3 文字しかない場合は、次を使用できます。

 int pos = Array.IndexOf(t_caMonth, arrayEnglishMonth[t_ciMonth - 1]
     .Substring(0,3));

3 文字を超える大文字と小文字の値を管理するには、次のようにします。

var pos = -1;
var sel = t_caMonth
    .Select((i, index) => new { index, i = i.ToUpper() })
    .Where(i => 
        i.i.Substring(0,3) == arrayEnglishMonth[t_ciMonth - 1].Substring(0, 3))
    .Select(i => i.index);
if (sel.Count() > 0)
    pos = sel.FirstOrDefault();

配列List<string>から を作成することもできます。t_caMonth

var pos2 = t_caMonth
    .ToList()
    .FindIndex(i => 
        i.ToUpper().Substring(0, 3) == 
            arrayEnglishMonth[t_ciMonth - 1].Substring(0, 3));
于 2013-08-05T06:29:42.057 に答える
0

以下を使用してみてください。最速だと思います
Array.FindIndex(strArray, s => s.StartsWith("AUG"));

乾杯。

于 2013-08-05T07:30:29.067 に答える