[英]Convert array to multidimensional array in C#
我對C#很陌生。 我有一個函數可以給我這樣的數組中的結果
[0] => value
[1] => value
[2] => value
[3] => value
[4] => value
但就我而言,[0] [1] [2]需要在一起,我將它們顯示在PHP的表中。 這是我的功能:
public List<string> ReadOpenCalls(int relation)
{
IQAssemblyResolver.Initialize(@"C:\Program Files\.....");
IQSDK IQSDK = new IQSDK();
string loginTekst = IQSDK.Login("Administrator", "..", "..").GetResult();
SDKRecordset inboundSet = IQSDK.CreateRecordset("R_ACTIONSCOPE", "CODE, DESCRIPTION, DATECREATED", "FK_RELATION = " + relation, "");
var messages = new List<string>();
if (inboundSet != null && inboundSet.RecordCount > 0)
{
inboundSet.MoveFirst();
do
{
string code = inboundSet.Fields["CODE"].Value.ToString();
string desc = inboundSet.Fields["DESCRIPTION"].Value.ToString();
string date = inboundSet.Fields["DATECREATED"].Value.ToString();
messages.Add( code);
messages.Add( desc);
messages.Add( date);
inboundSet.MoveNext();
}
while (!inboundSet.EOF);
return messages;
}
messages.Add("Error niet gelukt");
return messages;// null;
}
我希望輸出是這樣的:
[0] => [0] => "desc"
[1] => "code"
[2] => "date"
這樣我就可以在PHP的表中以一種不錯的方式輸出它。
快速修復:
var messages = new List<string[]>();
...
messages.Add( new string[] { code, desc, date});
但這也取決於在PHP中易於使用的內容。
更好的解決方案可能是編寫一個小類:
class MyMessage
{
public string Code { get; set; }
public string Desc { get; set; }
public string Date { get; set; }
}
當然,您必須將方法更改為以下方法之一:
public List<string[]> ReadOpenCalls(int relation) ...
public List<MyClass> ReadOpenCalls(int relation) ...
並且還需要在ServiceContract等中進行更改。
PHP會引發不良做法,並對數據結構產生可怕的理解。 請不要嘗試在PHP中看到或執行的操作之后的任何樣式。 特別是,使用數組索引代替適當的成員。
您是否考慮過編寫一個具有三個字段來描述消息的類?
嘗試這個,
更改
public List<string> ReadOpenCalls(int relation)
至
public List<List<string>> ReadOpenCalls(int relation)
更改
var messages = new List<string>();
至
var messages = new List<List<string>>();
並改變
messages.Add( code);
messages.Add( desc);
messages.Add( date);
至
List<string> list = new List<string>();
list.Add( code);
list.Add(desc);
list.Add(date);
messages.Add(list);
理想情況下,您想更改現有功能,但是using System.Linq
,可以在生成結果后更改結果。
var messages = ReadOpenCalls(relation);
var new messages = messages.Select((a,i) => new {index = i / 3, value = a})
.GroupBy (y => y.index, y => y.value)
.Select(g => g.ToList())
.ToList();
但是,您最好改變一下功能
直接添加列表
public List<List<string>> ReadOpenCalls(int relation)
{
IQAssemblyResolver.Initialize(@"C:\Program Files\.....");
IQSDK IQSDK = new IQSDK();
string loginTekst = IQSDK.Login("Administrator", "..", "..").GetResult();
SDKRecordset inboundSet = IQSDK.CreateRecordset("R_ACTIONSCOPE", "CODE, DESCRIPTION, DATECREATED", "FK_RELATION = " + relation, "");
var messages = new List<List<string>>();
if (inboundSet != null && inboundSet.RecordCount > 0)
{
inboundSet.MoveFirst();
do
{
string code = inboundSet.Fields["CODE"].Value.ToString();
string desc = inboundSet.Fields["DESCRIPTION"].Value.ToString();
string date = inboundSet.Fields["DATECREATED"].Value.ToString();
messages.Add(new List<string> { code, desc, date});
inboundSet.MoveNext();
}
while (!inboundSet.EOF);
return messages;
}
messages.Add("Error niet gelukt");
return messages;// null;
}
或創建一個類來保存值並返回該類的列表
更新-OP表示這是在Web服務中,因此我添加了DataContract
和DataMember
屬性。 您將需要確保項目引用System.Runtime.Serialization
using System.Runtime.Serialization;
[DataContract]
public class Class {
public Class(string code, string desc, string date) {
this.code = code;
this.desc = desc;
this.date = date;
}
[DataMember]
public string Code { get;set; }
[DataMember]
public string Desc { get;set; }
[DataMember]
public string Date { get;set; }
}
然后您更改的功能
public List<Call> ReadOpenCalls(int relation)
{
IQAssemblyResolver.Initialize(@"C:\Program Files\.....");
IQSDK IQSDK = new IQSDK();
string loginTekst = IQSDK.Login("Administrator", "..", "..").GetResult();
SDKRecordset inboundSet = IQSDK.CreateRecordset("R_ACTIONSCOPE", "CODE, DESCRIPTION, DATECREATED", "FK_RELATION = " + relation, "");
var messages = new List<Call>();
if (inboundSet != null && inboundSet.RecordCount > 0)
{
inboundSet.MoveFirst();
do
{
string code = inboundSet.Fields["CODE"].Value.ToString();
string desc = inboundSet.Fields["DESCRIPTION"].Value.ToString();
string date = inboundSet.Fields["DATECREATED"].Value.ToString();
messages.Add( new Call(code,desc, date));
inboundSet.MoveNext();
}
while (!inboundSet.EOF);
return messages;
}
messages.Add("Error niet gelukt");
return messages;// null;
}
將函數返回值更改為string[][]
並根據需要返回鋸齒狀數組 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.