डी

2009-08-11 9 views
7

में सहयोगी सरणी के आधार पर छंटनी मैं डी ऐप्स के लिए विभिन्न स्थानों में दिए गए उदाहरणों का पालन करने की कोशिश कर रहा हूं। आम तौर पर जब कोई भाषा सीखती है तो मैं उदाहरण ऐप्स पर शुरू करता हूं और उन्हें स्वयं को बदल देता हूं, पूरी तरह से सामान का परीक्षण करने के लिए।डी

एक ऐप जिसने मेरी आंख को पकड़ा था, पाठ के एक ब्लॉक में शब्दों की आवृत्ति को गिनना था। चूंकि शब्दकोश को एक सहयोगी सरणी में बनाया गया था (आवृत्ति को संग्रहीत करने वाले तत्वों के साथ, और चाबियाँ स्वयं शब्द हैं), आउटपुट किसी भी विशेष क्रम में नहीं था। इसलिए, मैंने साइट पर दिए गए उदाहरणों के आधार पर सरणी को सॉर्ट करने का प्रयास किया।

वैसे भी, उदाहरण ने एक लैम्ब्डा 'सॉर्ट दिखाया! (...) (सरणी);' लेकिन जब मैं कोड का प्रयास करता हूं डीएमडी इसे संकलित नहीं करेगा।

यहाँ नीचे उबला हुआ कोड है:

import std.stdio; 
import std.string; 

void main() { 
    uint[string] freqs; 

    freqs["the"] = 51; 
    freqs["programming"] = 3; 
    freqs["hello"] = 10; 
    freqs["world"] = 10; 

    /*...You get the point...*/ 

    //This is the actual example given, but it doesn't 
    //seem to work, old D version??? 
    //string[] words = array(freqs.keys);   

    //This seemed to work 
    string[] words = freqs.keys; 

    //Example given for how to sort the 'words' array based on 
    //external criteria (i.e. the frequency of the words from 
    //another array). This is the line where the compilor craps out! 
    sort!((a,b) {return freqs[a] < freqs[b];})(words); 

    //Should output in frequency order now! 
    foreach(word; words) { 
     writefln("%s -> %s", word, freqs[word]); 
    } 
} 

मुझे इस कोड को संकलित करने का प्रयास करें, मैं निम्नलिखित

 
    s1.d(24): Error: undefined identifier sort 
    s1.d(24): Error: function expected before(), not sort of type int 

किसी को भी मुझे बता सकते हैं मैं यहाँ क्या करने की जरूरत?

मैं डीएमडी v2.031 का उपयोग करता हूं, मैंने जीडीसी स्थापित करने का प्रयास किया है, लेकिन यह केवल v1 भाषा spec का समर्थन करता है। मैंने केवल dil को देखना शुरू कर दिया है, इसलिए मैं इस पर टिप्पणी नहीं कर सकता कि यह उपरोक्त कोड का समर्थन करता है या नहीं।

import std.algorithm; 
+1

जीडीसी तरह का मर चुका है, LLVM आधारित एलडीसी ले लिया है मैं टी की जगह – BCS

उत्तर

11

फ़ाइल के शीर्ष के निकट इस जोड़ने का प्रयास करें आदेश:

import std.algorithm; 
import std.file; 
import std.stdio; 
import std.string; 

void main(string[] args) 
{ 
    auto contents = cast(string)read(args[1]); 
    uint[string] freqs; 

    foreach(i,line; splitLines(contents)) 
     foreach(word; split(strip(line))) 
      ++freqs[word]; 

    string[] words = freqs.keys; 
    sort!((a,b)=> freqs[a]>freqs[b])(words); 

    foreach(s;words) 
     writefln("%s\t\t%s",s,freqs[s]); 
} 

ठीक है, लगभग 4 साल बाद ... :-)

+1

दोह! धन्यवाद, यह काम करता है। यह हमेशा आसान सामान है जो जानकारी खोजने के लिए सबसे कठिन है! – GKelly

2

यहाँ (cmdline से) कोई इनपुट फ़ाइल प्राप्त करने के लिए एक भी सरल तरीका है, मिल लाइनों/शब्द और शब्द frequencing की तालिका मुद्रित, अवरोही क्रम में: