none
list add轉型存入陣列 RRS feed

  • 問題

  •         請問各位前輩:

            如何將list.Add(line); 轉型存入sky陣列,之後可以拿來做運算

     

            List<string> list = new List<string>(); //新增一個list
            using (StreamReader reader = new StreamReader("D:\\5566.txt")) //讀取檔案
            {
                string line;//設立line字串
                while ((line = reader.ReadLine()) != null)
                {
                    list.Add(line); // 把line的內容Add to list.
                    double [] sky = Convert.ToDouble(list.Add(line));//這裡是錯誤的,想轉型成數值存入sky陣列
                    Console.WriteLine(line); // Write to console.
                }

    2011年5月20日 上午 07:00

解答

  • 跳錯誤的時候檢查你的line2變數,看它能不能轉成double
    • 已標示為解答 homu 2011年5月20日 下午 01:47
    2011年5月20日 上午 08:35

所有回覆

  • 你可以用兩個 List<T> 來做。
    最後再用 ToArray() 輸出到陣列就好。 
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/pages/StudyAzurecom-yun-duan-xue-tang/155855707799579
    2011年5月20日 上午 07:05
    版主
  • List<string> list = new List<string>(){
    "1","2","3"
    };
    double[] sky = list.ConvertAll<double>(s => Convert.ToDouble(s)).ToArray();
    2011年5月20日 上午 07:09
  • 謝謝兩位的指導

    看版主您的程式是以3個數字為例; 但改過之後出現formatExcetion 未處理 輸入字串格是不合?

    其中s 是指"1","2","3" 這3個數字嗎

    而我這裡要讀檔

    所以 我把 list.ConvertAll 放入也是不行

             using (StreamReader reader2 = new StreamReader("D:\\test2.txt")) //讀取檔案
            {
                string line2;//設立line陣列
                while ((line2 = reader2.ReadLine()) != null)//
                {
                     list.Add(line2); // 把line的內容Add to list.
                    double[] ROI = list.ConvertAll<double>(s => Convert.ToDouble(s)).ToArray();
                    Console.WriteLine(line2); // Write to console.
                }
            }

    還煩請版主在稍為講解一下  感謝

     

    2011年5月20日 上午 08:29
  • 跳錯誤的時候檢查你的line2變數,看它能不能轉成double
    • 已標示為解答 homu 2011年5月20日 下午 01:47
    2011年5月20日 上午 08:35
  • Hi,

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Text.RegularExpressions;
     
    namespace ConsoleApplication16
    {
    	class Program
    	{
    		static void Main(string[] args)
    		{
    			const string MATCH_PATTERN = @"^(\d+)\s*";
    			var content = File.ReadAllText (@"D:\test2.txt");
    			var ROI = Regex.Matches(content, MATCH_PATTERN, RegexOptions.Multiline).OfType<Match>().Select((m) => m.Groups[1].Value).ToArray();
    		}
    	}
    }
    


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年5月20日 上午 09:13
  •          using (StreamReader reader2 = new StreamReader("D:\\test2.txt")) //讀取檔案

            {
                string line2;//設立line陣列
                while ((line2 = reader2.ReadLine()) != null)//
                {
                     list.Add(line2); // 把line的內容Add to list.
                    double[] ROI = list.ConvertAll<double>(s => Convert.ToDouble(s)).ToArray();
                    Console.WriteLine(line2); // Write to console.
                }
            }

    Hi,

    提醒一下~程式不要硬兜上去用

    阿尼大的方法是會把集合內所有的字串元素轉換為Double Array

    你在While迴圈內一直去加字串集合的元素

    又一直去把字串集合轉換為Double Array

    程式看起來double陣列也不是在迴圈內使用

    冗餘的動作太多

    會有效能問題

    要這麼用的話~應該把轉換動作提出while

     

    List<string> list = new List<string>(); //新增一個list

            using (StreamReader reader = new StreamReader("D:\\5566.txt")) //讀取檔案
            {
                string line;//設立line字串
                while ((line = reader.ReadLine()) != null)
                {

     double value;

    if(!double.TryParse(value))

    continue;
                    list.Add(line); // 把line的內容Add to list.
                    Console.WriteLine(line); // Write to console.
                }

    }
    double[] ROI = list.ConvertAll<double>(s => Convert.ToDouble(s)).ToArray();

     


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年5月21日 上午 01:54