Estoy tratando de establecer las teclas de matriz como una cadena como en el siguiente ejemplo, pero en C#
.Establecer la clave de matriz como cadena no int?
<?php
$array = array();
$array['key_name'] = "value1";
?>
Estoy tratando de establecer las teclas de matriz como una cadena como en el siguiente ejemplo, pero en C#
.Establecer la clave de matriz como cadena no int?
<?php
$array = array();
$array['key_name'] = "value1";
?>
Lo más cerca que se obtiene en C# es Dictionary<TKey, TValue>
:
var dict = new Dictionary<string, string>();
dict["key_name"] = "value1";
Tenga en cuenta que una Dictionary<TKey, TValue>
es no el mismo que el arreglo asociativo de PHP, ya que es única accesible por un tipo de clave (TKey
- que es string
en el ejemplo anterior), a diferencia de una combinación de teclas de cadena/número entero (gracias a Pavel para aclarar este punto).
Dicho esto, nunca escuché a un desarrollador de .NET quejarse de eso.
En respuesta a tu comentario:
// The number of elements in headersSplit will be the number of ':' characters
// in line + 1.
string[] headersSplit = line.Split(':');
string hname = headersSplit[0];
// If you are getting an IndexOutOfRangeException here, it is because your
// headersSplit array has only one element. This tells me that line does not
// contain a ':' character.
string hvalue = headersSplit[1];
Pruebe un diccionario:
var dictionary = new Dictionary<string, string>();
dictionary.Add("key_name", "value1");
Se puede usar un Dictionary<TKey, TValue>
:
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary["key_name"] = "value1";
Uhm Te estoy adivinando quiere un diccionario:
using System.Collections.Generic;
// ...
var dict = new Dictionary<string, string>();
dict["key_name1"] = "value1";
dict["key_name2"] = "value2";
string aValue = dict["key_name1"];
También puede utilizar un KeyedCollection http://msdn.microsoft.com/en-us/library/ms132438%28v=vs.110%29.aspx donde su valor es un tipo complejo y tiene una propiedad única.
Usted tiene su hereda la colección de KeyedCollection, ejemplo ...
public class BlendStates : KeyedCollection<string, BlendState>
{
...
Para ello, debe reemplazar el método GetKeyForItem.
protected override string GetKeyForItem(BlendState item)
{
return item.DebugName;
}
Entonces, en este ejemplo, la colección está indexado por la cadena (el nombre de depuración del BlendState):
OutputMerger.BlendState = BlendStates["Transparent"];
Ya que todos los demás dicho diccionario, decidí que iba a responder con 2 arrays. Una matriz sería un índice en la otra.
Realmente no especificó el tipo de datos que encontraría en un índice en particular, así que seguí adelante y elegí una cadena para mi ejemplo.
Tampoco especificó si desea poder cambiar el tamaño de esto más tarde. Si lo hace, usaría List<T>
en lugar de T []
donde T es del tipo y luego simplemente exponga algunos métodos públicos para agregar para cada lista, si lo desea.
Así es como podría hacerlo. Esto también podría modificarse para pasar los posibles índices al constructor o hacerlo, sin embargo, lo haría.
class StringIndexable
{
//you could also have a constructor pass this in if you want.
public readonly string[] possibleIndexes = { "index1", "index2","index3" };
private string[] rowValues;
public StringIndexable()
{
rowValues = new string[ColumnTitles.Length];
}
/// <summary>
/// Will Throw an IndexOutofRange Exception if you mispell one of the above column titles
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public string this [string index]
{
get { return getOurItem(index); }
set { setOurItem(index, value); }
}
private string getOurItem(string index)
{
return rowValues[possibleIndexes.ToList().IndexOf(index.ToLower())];
}
private void setOurItem(string index, string value)
{
rowValues[possibleIndexes.ToList().IndexOf(index.ToLower())] = value;
}
}
A continuación, lo llama así:
StringIndexable YourVar = new YourVar();
YourVar["index1"] = "stuff";
string myvar = YourVar["index1"];
¿Estas seguro que el acceso de índice es parte de la definición de la matriz asociativa? Ver http://en.wikipedia.org/wiki/Associative_array – Odrade
@Odrade: no estoy en absoluto;) Es por eso que edité mi respuesta para referirme específicamente a "array asociativo de PHP" (probablemente justo después de su comentario). –
@Odrade: en el caso de las matrices PHP, no son realmente accesibles "por índice", sino que los enteros pueden ser claves junto con las cadenas (y hay un esquema de conversión muy intrincado, tal que '8' y' "8 "' son la misma clave pero '" 08 "' no lo es). No son índices en un sentido que no identifican la posición del elemento en el conjunto. –