2

私は文字列を持っています"2-6,8,10-15,20-23"

以下のように、配列内の完全に入​​力された数値範囲に変換する必要があります。

{2,3,4,5,6,8,10,11,12,13,14,15,20,21,22,23}

それを変換する方法はありますか?

4

5 に答える 5

6

Mark Heath は、PluralSight で LINQ に関するコースを開催しており、これに非常によく対処しています。LINQ を使用すると、以下に示す例を使用してこれをすばやく行うことができます。

string value = "7-10,2,5,12,17-18";
var result = value.Split(',')
                  .Select(x => x.Split('-'))
                  .Select(p => new { First = int.Parse(p.First()), Last = int.Parse(p.Last()) })
                  .SelectMany(x => Enumerable.Range(x.First, x.Last - x.First + 1))
                  .OrderBy(z=>z);

Split、文字列から配列を作成します。1 つ目Selectは、それぞれ 1 つまたは 2 つの要素を持つ配列の配列を作成します。2 つ目Selectは、配列値に基づいて開始値と終了値を示す匿名型を作成します。はメソッドをSelectMany使用してEnumerable.Range、各無名オブジェクトから数値の範囲を作成し、それIEnumerableを整数のコレクションにフラット化します。最後に、OrderByレポートやその他の使用のために番号を並べ替えます。

于 2016-05-13T15:18:47.390 に答える
2
 string numberString = "2-6,8,10-15,20-23";

 List<int> cNumberString = getValidString(numberString);

 List<int> getValidString(string str)
        {
            List<int> lstNumber = new List<int>();

            string[] cNumberArray = str.Split(',');

            for (int k = 0; k < cNumberArray.Length; k++)
            {
                string tmpDigit = cNumberArray[k];
                if (tmpDigit.Contains("-"))
                {
                    int start = int.Parse(tmpDigit.Split('-')[0].ToString());
                    int end = int.Parse(tmpDigit.Split('-')[1]);

                    for (int j = start; j <= end; j++)
                    {
                        if (!lstNumber.Contains(j))
                            lstNumber.Add(j);
                    }
                }
                else
                {
                    lstNumber.Add(int.Parse(tmpDigit));
                }
            }

            return lstNumber;
        }
于 2013-11-13T13:15:35.070 に答える
1

入力文字列が常に適切にフォーマットされると仮定すると、次のようなことを試すことができます。

Public Function GetIntArray(input As String) As Integer()
  Dim splits() = input.Split(",")
  Dim result As New List(Of Integer)

  For Each s In splits
    If s.Contains("-") Then
      Dim low As Integer = s.Split("-")(0)
      Dim hi As Integer = s.Split("-")(1)

      For i = low To hi
        result.Add(i)
      Next
    Else
      result.Add(s)
    End If
  Next
  Return result.ToArray
End Function

基本的な考え方は、入力文字列をコンマ区切り記号で分割し、その文字列が単一の数値であるか範囲を持っているかを確認することです。

于 2013-11-10T14:37:44.737 に答える
0

Array.ConvertAll メソッドを使用します。

Dim stringArray = {"123", "456", "789"}
Dim intArray = Array.ConvertAll(stringArray, Function(str) Int32.Parse(str))
于 2013-11-10T12:38:04.930 に答える