我正在研究 NeuralNet,我決定將網路的邊緣(連接)存盤為 format (int,int) edge。我使用它是因為它很容易添加到串列中List<(int,int)> listOfConnections
我已經在我的代碼中的多個地方實作了這個變數,直到現在我才意識到我不確定如何分別訪問每個 int。當我嘗試時edge[0],我得到一個錯誤,我不能在這種型別的變數中使用索引。
任何想法如何分別拉出第一個和第二個整數?另外這種形式的變數的名稱是什么?它不是 Touple,也不是 Vector,如果我知道這個名字,也許我可以找到更多關于如何使用它的資訊。
uj5u.com熱心網友回復:
您已經創建了一個ValueTuple。
您可以使用 訪問第一個專案,使用 訪問edge.Item1第二個專案edge.Item2。
.NET 小提琴示例
uj5u.com熱心網友回復:
元組不支持 C# 中的索引。要訪問元組中的單個成員,請使用以下語法:
(int, int) edge = (3, 8)
Console.Writeline(edge.Item1) // 3
Console.Writeline(edge.Item2) // 8
或者,您可以命名元組成員以獲得更好的可讀性:
(int foo, int bar) edge = (3, 8)
Console.Writeline(edge.foo) // 3
Console.Writeline(edge.bar) // 8
或者使用元組解包:
(int foo, int bar) = (3, 8)
Console.Writeline(foo) // 3
Console.Writeline(bar) // 8
uj5u.com熱心網友回復:
所以你有一個完整的 ValueTuple 串列:
var edge = (1, 2);
var var listOfConnections = new List<(int, int)>();
每個專案都是一個(int, int),就像 Broots 所說,有一個Item1和Item2..
listOfConnections[0].Item1
..但是如果你在 List 宣告中給出你的元組名稱:
var listOfConnections = new List<(int Prev, int Next)>();
..您可以使用這些名稱:
listOfConnections[0].Prev
或者如果你想給他們不同的名字,不管他們當前的名字是什么,你可以在變數簽名中定義元組有不同的名字:
List<(int Start, int End)> someList = listOfConnections;
someList[0].Start;
或者,如果您想用不同的名稱挖掘 ValueTuple,請將變數的“型別”宣告為與名稱有關的不同簽名:
(int Go, int Stop) x = listOfConnections[0];
x.Go;
或者,如果您想將串列中的 ValueTuple 解構為一對變數,請為變數提供型別簽名,但不要為變數提供名稱:
(int node1, int node2) = listOfConnections[0];
Console.Write(a); //node1 is an int variable like any other, e.g. var node1 = 1;
ValueTuples 和命名成員的整個程序非常靈活,因為它只是編譯器添加的語法糖。它們只是(int, int),您使用的名稱取決于背景關系的最新定義:
public List<(int Foo, int Bar)> GetNodes(){
return ...
}
var x = GetNodes(); //x[0].Foo
List<(int Baz, int Bop)> y = GetNodes(); //y[0].Baz
var z = (List<(int Bob, int Ben)>)GetNodes(); //z[0].Bob
請記住- 如果您將這些內容序列化為 JSON,它們僅在源代碼的背景關系中具有名稱。到他們編譯的時候,所有東西都被稱為 Item1, Item2,所以他們會這樣序列化。您的源代碼呼叫它們的知識已經不復存在了..
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/429755.html
上一篇:為什么python在這里變形
