[Issue 1323] Implement opIn_r for arrays
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Jul 9 08:56:56 PDT 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1323
------- Comment #2 from regan at netmail.co.nz 2007-07-09 10:56 -------
Workarounds... (that dont work if key and value type are the same)
bool contains(T)(T[] array, T value)
{
foreach(v; array) if (v == value) return true;
return false;
}
bool contains(V, K)(V[K] array, V value)
{
foreach(v; array.values) if (v == value) return true;
return false;
}
bool contains(V, K)(V[K] array, K key)
{
foreach(k; array.keys) if (k == key) return true;
return false;
}
int find(T)(T[] array, T value)
{
foreach(i, v; array) if (v == value) return i;
return -1;
}
K find(V, K)(V[K] array, V value)
{
//sadly inefficient
foreach(v; array.values)
{
if (v != value) continue;
foreach(k; array.keys)
{
if (array[k] == v) return k;
}
}
return K.init;
}
V find(V, K)(V[K] array, K key)
{
return array[key];
}
void main()
{
string[char] ctos;
char[int] itoc;
char[] carr;
int[] iarr;
ctos['c'] = "string";
assert(ctos.contains('c'));
assert(ctos.contains("string"));
itoc[5] = 'c';
assert(itoc.contains(5));
assert(itoc.contains('c'));
carr ~= 'c';
assert(carr.contains('c'));
iarr ~= 5;
assert(iarr.contains(5));
assert(ctos.find('c') == "string");
assert(ctos.find("string") == 'c');
assert(itoc.find(5) == 'c');
assert(itoc.find('c') == 5);
assert(carr.find('c') == 0);
assert(iarr.find(5) == 0);
}
--
More information about the Digitalmars-d-bugs
mailing list