2009-10-16 7 views
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 до строки? или можем ли мы сделать удовольствие с это преобразование?

ответ

7
  1. Это просто доступ к массиву - он использует элемент из «чисел» в качестве индекса в массив «строк».

  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 (var s in textNums) { Console.WriteLine (s); }

Это по-прежнему целыми числами - но вы можете сделать то же самое с словарях, где ключи и другие типы.

+0

Большое спасибо.:) Приятного дня – user190560

+0

Я ожидал ответа на один из моих предыдущих вопросов (Название вопроса: Linq-Running Total и Sub Total). Если время позволяет мне любезно помочь мне в этом. – user190560

+0

Джон, я не думаю, что это лучшее решение. Ох, что я сказал!?! – AnthonyLambert

5

№. Строковые представления находятся в правильном порядке, это все. Здесь нет никакой магии.

Посмотрите на массив строк

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

тот факт, что его правильно упорядочены поэтому отображение работы.

+0

спасибо. Я плохо себя чувствую из-за своей глупости. Я правильно не рассмотрел этот пример. – user190560

2

Когда вы говорите строки [п] вы обращаетесь к п-е значение массива, а массив упорядочен, как:

строки [0] = «ноль»; строки [1] = «один»; ... строки [4] = "four";

Таким образом, никакой магии здесь, просто упорядоченный массив: P

+0

Извините! Я не прошел его должным образом. Благодарю вас. :) – user190560

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 типов, так что это очень гибкое.

+1

Это решение имеет тот недостаток, что вы обрабатываете свой код как код, так и текст. Тот факт, что перечисление с именем «Три» можно превратить в строку, полезно во многих местах, но я чувствую, что довольно просто смотреть на имя как строку в пользовательском выпуске. – Brian

+0

Кроме того, он не будет работать для нецелых типов (например, строк, поплавков, гидов) и не является легко интернационализированным (в отличие от словаря, где вы можете просто использовать разные словари для разных языков). –

+0

он на самом деле не говорит, что хочет, чтобы он готовил тосты или действительно работал на международном уровне ... хотя он мог бы ..... ему не нравится тост, который я люблю тосты. – AnthonyLambert