wie oft wiederholt sich ein key bei Value

sim26

Mitglied
Hallo zusammen,

habe folgendes Problem, wollte ich mein Value in mein Hashtable sortieren durch ihren Key, dann habe ein Treeset erstellt und mit subSet Methode das gemacht.


Beispiel:


Key Value
gtta 60
aaaa 45
taac 45
atag 30
ctag 24
tttt 24
attt 23
ctta 19
aaat 15
aatt 12
atat 9
taag 9
tatt 5
ttag 1

Ich will wissen wie oft wiederholt sich der key bei folgendes Value von 1 bis 10 z.b.

Theoretisch sollte bei mein Beispiel „4“ geben, aber mein Programme gibt als Ergebnisse nur „3“, weil key „9“ ist zwei mal wiederholt und beim treeset nehmt das nicht!

Hat Jemand einer Idee wie ich das machen soll?
 
Hallo!

Kannst du das vielleicht ein wneig umformulieren... ich verstehe nicht, was du meinst.
Willst du nur die Elemente zaehlen deren Value in dem gesuchten Interval (1-10) liegen?

Gruss Tom
 
beim folgenden beispiel will ich wissen wie viel key habe ich von wert 1 bis wert 10 (value) habe ich.

Object value;
SortedSet werte=new TreeSet();

System.out.println( werte.first()); // gibt: 60
System.out.println( werte.last()); // gibt: 1
System.out.println(werte.subSet(1,10)); // gibt : 3 obwohl sollte 4 sein (weil 9 ist zwei mal dann er zählt die nur einmal)


Key Value
gtta 60
aaaa 45
taac 45
atag 30
ctag 24
tttt 24
attt 23
ctta 19
aaat 15
aatt 12
atat 9
taag 9
tatt 5
ttag 1
 
Hallo!

Das Problem ist, dass das TreeSet den Comporator als Indkator fuer Gleichheit verwendet. Sprich ergibt ein Vegrleich, dass zwei Werte in der Reihenfolge nach gleichrangig sind, so die beiden Instanzen vom TreeSet als gleich erachtet. Die schon vorhandene Instanz bleibt dann im TreeSet und die "neue" wird ignoriert.

Schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.util.HashSet;
import java.util.Set;

/**
 * @author Tom
 * 
 */
public class DNASequenceCountExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Set<DNASequencePair> dnaSequencePairs = new HashSet<DNASequencePair>();
		dnaSequencePairs.add(new DNASequencePair("gtta", 60));
		dnaSequencePairs.add(new DNASequencePair("aaaa", 45));
		dnaSequencePairs.add(new DNASequencePair("taac", 45));
		dnaSequencePairs.add(new DNASequencePair("atag", 30));
		dnaSequencePairs.add(new DNASequencePair("ctag", 24));
		dnaSequencePairs.add(new DNASequencePair("tttt", 24));
		dnaSequencePairs.add(new DNASequencePair("attt", 23));
		dnaSequencePairs.add(new DNASequencePair("ctta", 19));
		dnaSequencePairs.add(new DNASequencePair("aaat", 15));
		dnaSequencePairs.add(new DNASequencePair("aatt", 12));
		dnaSequencePairs.add(new DNASequencePair("atat", 9));
		dnaSequencePairs.add(new DNASequencePair("taag", 9));
		dnaSequencePairs.add(new DNASequencePair("tatt", 5));
		dnaSequencePairs.add(new DNASequencePair("ttag", 1));

		Range range = new Range(1, 10);
		for (DNASequencePair dnaSequencePair : dnaSequencePairs) {
			if (range.containts(dnaSequencePair.value)) {
				System.out.println(dnaSequencePair);
			}
		}

	}

	static class Range {
		int startValue;

		int endValue;

		public Range(int startValue, int endValue) {
			this.startValue = startValue;
			this.endValue = endValue;
		}

		public boolean containts(int value) {
			return value >= this.startValue && value <= this.endValue;
		}
	}

	static class DNASequencePair {
		String dnaSequence;

		int value;

		/**
		 * @param dnaSequence
		 * @param value
		 */
		public DNASequencePair(String dnaSequence, int value) {
			super();
			this.dnaSequence = dnaSequence;
			this.value = value;
		}

		public String getDnaSequence() {
			return dnaSequence;
		}

		public int getValue() {
			return value;
		}

		@Override
		public int hashCode() {
			final int PRIME = 31;
			int result = 1;
			result = PRIME * result + ((dnaSequence == null) ? 0 : dnaSequence.hashCode());
			result = PRIME * result + value;
			return result;
		}

		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			final DNASequencePair other = (DNASequencePair) obj;
			if (dnaSequence == null) {
				if (other.dnaSequence != null)
					return false;
			} else if (!dnaSequence.equals(other.dnaSequence))
				return false;
			if (value != other.value)
				return false;
			return true;
		}

		public String toString() {
			return this.dnaSequence + ": " + this.value;
		}
	}
}

In Python ging das ganz easy:
Python:
dnaSequences = []
dnaSequences.append(("gtta", 60))
dnaSequences.append(("aaaa", 45))
dnaSequences.append(("taac", 45))
dnaSequences.append(("atag", 30))
dnaSequences.append(("ctag", 24))
dnaSequences.append(("tttt", 24))
dnaSequences.append(("attt", 23))
dnaSequences.append(("ctta", 19))
dnaSequences.append(("aaat", 15))
dnaSequences.append(("aatt", 12))
dnaSequences.append(("atat", 9))
dnaSequences.append(("taag", 9))
dnaSequences.append(("tatt", 5))
dnaSequences.append(("ttag", 1))
filteredDnaSequences = filter(lambda x : x[1] in range(1,10), dnaSequences)
len(filteredDnaSequences)

Gruss Tom
 
Zurück