2013-07-03 147 views
-3

我是新來的C#的整數表示,我碰到了下面的問題(我已經看過了這裏的解決方案,並在谷歌,但沒有成功):C#:獲取一個字符串數組

鑑於數組字符串(一些列可能是雙倍或整數「字符串格式」)我想將此數組轉換爲整數數組。 這個問題只涉及具有實際字符串值的列(比如說一個國家列表)。

現在我相信一本詞典可以幫助我識別給定列中的唯一值並將一個整數與每個出現的國家相關聯。 然後爲了創建我的新數組,它應該是int類型(或double類型),我可以遍歷整個數組並通過字典定義新數組。這我需要爲每個有字符串值的列做。 這似乎效率低下,有沒有更好的方法?

最後我想用數據做多元線性迴歸(或者甚至擬合一個廣義線性模型,這意味着我最終要得到一個設計矩陣)。

編輯: 1)很不夠明確,我將設法澄清:

鑑於:

MAKE; VALUE; GENDER
AUDI; 40912.2;米
WV; 3332;˚F
AUDI; 1234.99;米
DACIA; 0;米
AUDI; 12354.2;米
AUDI; 123;米
VW; 21321.2;˚F

我想獲得一個 「數字」 矩陣與用於字符串值列
MAKE標識符; VALUE; GENDER
1; 40912.2; 0
2; 3332; 1
1; 1234.99; 0
3; 0; 0
1; 12354.2; 0
1; 123; 0
2; 21321.2; 1

2)我覺得這其實不是我所需要解決我的問題。它看起來仍然是一個有趣的問題。

3)感謝您的回覆。

+4

你能用一句話總結一下你的整個問題嗎?爲了讓我們更清楚一些嗎? – 2013-07-03 11:43:27

+0

您是否問如何將字符串轉換爲C#中的雙精度型? – doctorlove

+1

你能舉一個你有*的小例子嗎?你想要什麼? – Corak

回答

0

這將採取所有可能的字符串代表一個整數,並將它們放入一個List中。 你可以用相同的字符串來表示一個double。 這是你的意思?

var myDictionary = new Dictionary<int,string>(); 
myDictionary.Add(1,"CountryOne"); 
myDictionary.Add(2,"CountryTwo"); 
myDictionary.Add(3,"CountryThree"); 

然後你就可以得到像你的價值觀:

string myCountry = myDictionary[2]; 

但還是不知道,如果你想給每個串映射到這樣一個關鍵

List<int> myIntList = new List<int>() 
foreach(string value in stringArray) 
{ 
     int myInt; 
     if(Int.TryParse(value,out myInt) 
     { 
      myIntList.Add(myInt); 
     } 
} 

字典好我現在正在幫你。你有索姆代碼來指定你的意思嗎?

0

我不確定這是否是您要查找的內容,但它確實輸出了您正在查找的結果,從中可以創建適當的數據結構以供使用。我使用了一個字符串列表,但你可以使用其他的東西來保存處理過的數據。如果需要,我可以進一步擴展。

它確實假定基於分號字符的「列」數在整個數據中是相等的,並且足夠靈活以處理任意數量的列。它的醜陋但它應該得到你想要的。

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace ConsoleApplication3 
{ 
    class StringColIndex 
    { 
     public int ColIndex { get; set; } 
     public List<string> StringValues {get;set;} 
    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var StringRepresentationAsInt = new List<StringColIndex>(); 
      List<string> rawDataList = new List<string>(); 
      List<string> rawDataWithStringsAsIdsList = new List<string>(); 
      rawDataList.Add("AUDI;40912.2;m");rawDataList.Add("VW;3332;f "); 
      rawDataList.Add("AUDI;1234.99;m");rawDataList.Add("DACIA;0;m"); 
      rawDataList.Add("AUDI;12354.2;m");rawDataList.Add("AUDI;123;m"); 
      rawDataList.Add("VW;21321.2;f "); 
      foreach(var rawData in rawDataList) 
      { 
       var split = rawData.Split(';'); 
       var line = string.Empty; 
       for(int i= 0; i < split.Length; i++) 
       { 
        double outValue; 
        var isNumberic = Double.TryParse(split[i], out outValue); 
        var txt = split[i]; 
        if (!isNumberic) 
        { 
         if(StringRepresentationAsInt 
          .Where(x => x.ColIndex == i).Count() == 0) 
         { 
          StringRepresentationAsInt.Add(
           new StringColIndex { ColIndex = i, 
            StringValues = new List<string> { txt } }); 
         } 
         var obj = StringRepresentationAsInt 
          .First(x => x.ColIndex == i); 
         if (!obj.StringValues.Contains(txt)){ 
          obj.StringValues.Add(txt); 
         } 
         line += (string.IsNullOrEmpty(line) ? 
          string.Empty : 
          ("," + (obj.StringValues.IndexOf(txt) + 1).ToString())); 
        } 
        else 
        { 
         line += "," + split[i]; 
        } 
       } 
       rawDataWithStringsAsIdsList.Add(line); 
      } 
      rawDataWithStringsAsIdsList.ForEach(x => Console.WriteLine(x)); 
      Console.ReadLine(); 
      /* 
      Desired output: 
      1;40912.2;0 
      2;3332;1 
      1;1234.99;0 
      3;0;0 
      1;12354.2;0 
      1;123;0 
      2;21321.2;1 
      */ 
     } 
    } 
} 
相關問題