搜索
bottom↓
回复: 18

C# 不限制大小的 二維 string 阵列

[复制链接]

出0入0汤圆

发表于 2020-3-13 18:03:59 | 显示全部楼层 |阅读模式
本帖最后由 陳聖文 于 2020-3-13 18:18 编辑

大家好,小弟我入前正在開發C#
想請問,如果我要開一個不指定大小string的陣列
需要怎麼設定呢?
由於功能需要我不知道他的X軸和Y軸

目前我在一維陣列上也無法做出無限制大小的陣列
只是用一個看起來很大的數字當總寬度
  1.         string[] Tag_array = new string[100];       //存放Tag用的
复制代码

後續證明...這根本不夠用

謝謝

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入22汤圆

发表于 2020-3-13 18:08:57 | 显示全部楼层
本帖最后由 jiaowoxiaolu 于 2020-3-13 18:11 编辑

用list代替
List<string> str = new List<string>();
str.add("abcdefg")

出0入442汤圆

发表于 2020-3-13 18:09:25 来自手机 | 显示全部楼层
list string即可。随时随地添删改。另外如果经常频繁操作字符串,可以考虑stringbuilder

出10入0汤圆

发表于 2020-3-13 18:16:56 | 显示全部楼层
楼主是港OR台的朋友!

出0入0汤圆

 楼主| 发表于 2020-3-13 18:17:58 | 显示全部楼层
這個...看起來是一維陣列...是嗎?

出0入0汤圆

发表于 2020-3-13 19:46:29 | 显示全部楼层
List<Lis<string>> 二维 不限大小  

出20入62汤圆

发表于 2020-3-13 20:07:26 | 显示全部楼层
和楼上的看法一致。用list~

出0入0汤圆

 楼主| 发表于 2020-3-15 10:02:40 | 显示全部楼层
huike 发表于 2020-3-13 18:16
楼主是港OR台的朋友!

台灣的囉

出0入0汤圆

 楼主| 发表于 2020-3-15 10:58:36 | 显示全部楼层

我測試的有點矇
可以麻煩你幫我試寫

String_Array(0,0)="0_0"
String_Array(0,1)="0_1"
String_Array(0,2)="0_2"

String_Array(1,0)="1_0"
String_Array(1,2)="1_2"

String_Array(2,2)="2_2"
String_Array(2,0)="2_0"
String_Array(2,1)="2_1"

以上這種,有的中間有空一格(例如沒有1_1)
或是這種,由2_2下一個寫2_0,然後再寫2_1
大概會長怎麼樣子嗎?

List...有點超出我的理解範圍

出0入147汤圆

发表于 2020-3-15 11:06:14 | 显示全部楼层
陳聖文 发表于 2020-3-15 10:58
我測試的有點矇
可以麻煩你幫我試寫

List才是正解, 可以理解为大小自动扩展的二维字符串数组,C#开发,要转变思路,不要用传统的写C代码的思路来做

出20入186汤圆

发表于 2020-3-15 11:14:13 | 显示全部楼层
用StringBuild才是王道

出0入0汤圆

发表于 2020-3-15 11:17:18 | 显示全部楼层
陳聖文 发表于 2020-3-15 10:58
我測試的有點矇
可以麻煩你幫我試寫

呃, 说实话我没太理解你的话。
我可以举个例子:
var strArray = new List<List<string>>();
// 添加新的一行
List<string> newStrLine = new List<string>();
strArray.Add(newStrLine );  //
// 添加元素在第一行
newStrLine .Add(“Test”);
newStrLine .Add("Test2");
// 使用第1行第1个元素
Consonal.WriteLine($"str = {strArray[0][0]}");
// 使用第1行第2个元素
Consonal.WriteLine($"str = {strArray[0][1]}");

你如果需要添加新行,就向strArray中Add 一个新的List<string>

直接手打的 不排除有语法错误。



出0入0汤圆

 楼主| 发表于 2020-3-15 13:37:27 | 显示全部楼层
浮华一生 发表于 2020-3-15 11:17
呃, 说实话我没太理解你的话。
我可以举个例子:
var strArray = new List();

那如果我可以照順序將
第一行 第二個元素設定為 "L1E2"
第一行 第四個元素設定為 "L1E4"
第一行 第一個元素設定為 "L1E1"
嗎?

再添加第一個元素(L1E1)那個元素時第二個和第四個元素不會被動到
同時如果查詢 第3個元素 和 第0個元素 時 要回傳NULL

直接看你的程式好像是...
第一個元素是Test
第二個元素是Test2
不知道有沒有理解錯誤

出0入0汤圆

发表于 2020-3-15 15:06:31 | 显示全部楼层
陳聖文 发表于 2020-3-15 13:37
那如果我可以照順序將
第一行 第二個元素設定為 "L1E2"
第一行 第四個元素設定為 "L1E4"

List 是一个链表。 你在访问使用它的元素之前,你要先使用 Add 添加元素,来实现一个“预分配”,或者“预占位”的意思。
这里只是用它来"伪造"二位数组。 你在Add了之后, 便可以像二维数组一样使用。  

出0入0汤圆

 楼主| 发表于 2020-3-18 17:52:58 | 显示全部楼层
出現了一些衍生問題

以下是目前的程序
  1. class Form1:Form
  2. {
  3.     main()
  4.     {
  5.         DirectoryInfo DirI_In = new DirectoryInfo(Text_In_Path.Text);   //輸入目錄資料
  6.         DirectoryInfo[] DirI_Mian_Dir = DirI_In.GetDirectories();       //取得主目錄的File陣列

  7.         foreach (DirectoryInfo DirI_Sub_Dir in DirI_Mian_Dir)
  8.         {
  9.             if (DirI_Sub_Dir.Exists)        //如果這是目錄
  10.              {
  11.                 List_CSV.Add(   new CSV_Info()
  12.                                 {   ID = List_ID,
  13.                                     Useful = true,
  14.                                     Name = DirI_Sub_Dir.Name,
  15.                                     Tag = new  List_Tag<TAG_Info>
  16.                                 }
  17.                             );
  18.             }
  19.         }
  20.     }
  21. }
  22. public class TAG_Info
  23. {
  24.     public int ID;      //這個Tag得唯一序號(之後可能也會用於放置位置)
  25.     public bool Useful; //這個Tag有用
  26.     public string Name; //這個Tag的名
  27. }
  28. public class CSV_Info
  29. {
  30.     public int ID;      //這個CSV得唯一序號(之後可能也會用於製作順序)
  31.     public bool Useful; //這個CSV有用
  32.     public string Name; //這個CSV的名
  33.     public TAG_Info Tag;//這個CSV擁有的Tag
  34. }
复制代码


以上程序在Tag = new List_Tag<TAG_Info>這句會出現紅線
我預期會在那邊建立一個名為 List_Tag的List (架構是TAG_Info)
可是會紅線,不知道要怎麼解決

還請各位解答

出0入0汤圆

发表于 2020-3-18 18:30:08 | 显示全部楼层
陳聖文 发表于 2020-3-18 17:52
出現了一些衍生問題

以下是目前的程序

Tag = new  List_Tag<TAG_Info>()    括号得要

出30入25汤圆

发表于 2020-3-18 18:32:05 | 显示全部楼层
本帖最后由 shamiao 于 2020-3-18 18:38 编辑

我认为你需要 Dictionary 数据类型而不是 List 。

这个取决于你的数据矩阵是稀疏的还是致密的。如果是稀疏的,明显Dictionary更有利。

也就是说:
  1. var dict = new System.Collection.Generics.Dictionary<Tuple<uint, uint>, string>();
  2. dict.Add(Tuple.Create(0, 1), "abc");
  3. var r1 = dict.ContainsKey(Tuple.Create(0, 1)); // true
  4. var r2 = dict[Tuple.Create(0, 1)]; // "abc"
复制代码


出0入0汤圆

 楼主| 发表于 2020-3-19 08:49:16 | 显示全部楼层
浮华一生 发表于 2020-3-18 18:30
Tag = new  List_Tag()    括号得要

恩恩

改完變成
  1.       
  2. /*List.Add()*/            
  3. List_CSV.Add
  4. (   
  5.      new CSV_Info()
  6.      {   ID = List_ID_CNT,
  7.           Useful = true,
  8.           Name = DirI_Sub_Dir.Name,
  9.           Tag = new List<TAG_Info>()
  10.      }               
  11. );
复制代码

以及
  1.    
  2. public class CSV_Info
  3. {
  4.      public int ID;      //這個CSV得唯一序號(之後可能也會用於製作順序)
  5.      public bool Useful; //這個CSV有用
  6.      public string Name; //這個CSV的名
  7.      public List<TAG_Info> Tag;//這個CSV擁有的Tag
  8.      public CSV_Info()
  9.      {
  10.           Tag = new List<TAG_Info>();
  11.      }
  12. }
复制代码


就可以了
感謝~

出0入0汤圆

 楼主| 发表于 2020-3-19 09:21:21 | 显示全部楼层
我發現我不知道怎麼在那個Tag_List內新增資料@@
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-28 11:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表