Sorting Assosiative Arrays and Finding Largest Common Substring
helxi via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Mar 16 09:02:13 PDT 2017
I was looking for ways to find the largest common substring
between two given substrings and have learnt
1. .length is of type ulong
2. writing string[int] will not give me a sorted array
3. ulong cannot be sorted by sorted
What's the trick to sort the associative array by their keys?
Code snippet:
....
import std.stdio;
//find the largest substring of the two strings
void main(string[] args){
string str1 = args[1];
string str2 = args[2];
string[ulong] commons;
//is a char from str1[n] == str2[n]?
//is the char from str1[n+1] == str2[n+1]?
for (int i = 0; i < str1.length; i++){
for (int j = 0; j < str2.length; j++){
if (str2[j] == str1[i]){
string current = ""~str1[i];
for (int a = 1; (a+i < str1.length && a+j <
str2.length); a++){
if(str2[a+j] == str1[a+i]){
current ~= str1[a+i];
}
}
commons[current.length] = current;
}
}
}
writeln(commons); //[4:"asdf", 2:"df", 1:"f", 3:"sdf"]
//writeln(commons[commons.keys.max]); <-won't work, no max
for ulong[]
writeln(commons[commons.keys[0]]); //asdf
//but can't guarantee the largest value is the first key
}
---
$./main asdf asdfasdfc
[4:"asdf", 2:"df", 1:"f", 3:"sdf"]
More information about the Digitalmars-d-learn
mailing list