0
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
string[] strings = { "zero", "one", "two", "three", "four", "five", "six",
                     "seven","eight", "nine" };

 var textNums =
                from n in numbers
                select strings[n];

   Console.WriteLine("Number strings:");

   foreach (var s in textNums)
   {
                Console.WriteLine(s);
   }

1)「整数」を「単語」の整数を表すように変換するメカニズムは何ですか?

2)そのような種類の変換は、intからstringへの変換でのみ可能ですか?それとも、この変換を楽しむことができますか?

4

4 に答える 4

7
  1. これは単なる配列アクセスです。「numbers」の要素を「strings」配列へのインデックスとして使用しています。

  2. 配列には整数のみが機能しますが、Dictionary<string, string>任意のマッピングを行うために、または何でも同じように使用できます。この場合、文字列配列は。のようなものと考えることができますDictionary<int, string>。あなたもそのように書き直すことができます:

    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
    var words = new Dictionary<int, string>
    {
        { 0, "zero" },
        { 1, "one" },
        { 2, "two" },
        { 3, "three" },
        { 4, "four" },
        { 5, "five" },
        { 6, "six" },
        { 7, "seven" },
        { 8, "eight" },
        { 9, "nine" }
    };
    var textNums = from n in numbers
                   select words[n];
    

    Console.WriteLine( "数値文字列:");

    foreach(textNumsのvar s){Console.WriteLine(s); }

それはまだ整数を使用していますが、キーが他のタイプである辞書でも同じことができます。

于 2009-10-16T16:38:36.463 に答える
5

いいえ。文字列表現は正しい順序になっています。ここには魔法はありません。

文字列配列を見てください

strings[0] = "zero";
strings[1] = "one";
strings[2] = "two";
.
.

正しく順序付けられているという事実が、マッピングが機能する理由です。

于 2009-10-16T16:37:37.420 に答える
2

文字列[n]と言うと、配列のn番目の値にアクセスしており、配列は次のように順序付けられています。

文字列[0]="ゼロ"; 文字列[1]="one"; ...strings [4] = "four";

したがって、ここでは魔法はなく、順序付けられた配列だけです:P

于 2009-10-16T16:43:31.320 に答える
1

私は次のことをします:

public enum MyNumberType { 
        Zero = 0, One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
        }

次の方法で、やりたいことができます。

namespace ConsoleApplication
{
    class Program
    {
        public enum MyNumberType { Zero = 0, One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten }

        private static int GetIntValue(MyNumberType theType) { return (int) theType; }
        private static String GetStringValue(MyNumberType theType) { return Enum.GetName(typeof (MyNumberType),theType); }
        private static MyNumberType GetEnumValue (int theInt) {
            return (MyNumberType) Enum.Parse( typeof(MyNumberType), theInt.ToString() ); }

        static void Main(string[] args)
        {
            Console.WriteLine( "{0} {1} {2}", 
                GetIntValue(MyNumberType.Five), 
                GetStringValue( MyNumberType.Three),
                GetEnumValue(7)
                );
            for (int i=0; i<=10; i++)
            {
                Console.WriteLine("{0}", GetEnumValue(i));
            }
        }
    }
}

次の出力を生成します。

5 Three Seven
Zero
One
Two
Three
Four
Five
Six
Seven
Eight
Nine
Ten

これは、次のように、より大きな数や連続した範囲にない数に拡張できます。

public enum MyNumberType { 
        ten= 10, Fifty=50, Hundred=100, Thousand=1000
        }

列挙型はint型だけでなく他の型でも使用できるため、これは非常に柔軟です。

于 2009-10-16T17:33:35.400 に答える