We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 77734da commit 7778d06Copy full SHA for 7778d06
3 files changed
vecxt/src/doublearray.scala
@@ -2,11 +2,47 @@ package vecxt
2
3
import narr.*
4
import vecxt.JsNativeDoubleArrays.*
5
-
6
import arrays.*
7
8
object DoubleArrays:
9
- // extension (vec: NArray[Double])
+ extension (vec: NArray[Double])
+ inline def unique: NArray[Double] =
10
+ if (vec.size == 0) {
11
+ NArray.empty[Double]
12
+ } else {
13
+
14
+ val data = narr.copy[Double](vec)
15
+ narr.sort(data)()
16
+ var elementCount = 1
17
+ var lastElement = data(0)
18
19
+ var i = 0
20
+ while (i < data.length) {
21
+ val di = data(i)
22
+ if (di != lastElement) {
23
+ elementCount += 1
24
+ lastElement = di
25
+ }
26
+ i += 1
27
28
29
+ val result = NArray.ofSize[Double](elementCount)
30
+ result(0) = data(0)
31
+ lastElement = data(0)
32
+ var idx = 1
33
+ i = 0
34
35
36
37
+ result(idx) = di
38
39
+ idx += 1
40
41
42
43
44
+ result
45
46
47
// inline def lt(num: Double): NArray[Boolean] = vec < num
48
vecxt/test/src/array.test.scala
@@ -33,6 +33,29 @@ class ArrayExtensionSuite extends munit.FunSuite:
assert(out.contains("5"))
}
+ test("unique") {
+ val v1 = NArray[Double](1, 2, 3, 2, 1, 4)
+ val unique = v1.unique
+ assertEquals(unique.length, 4)
+ assertEquals(unique(0), 1.0)
+ assertEquals(unique(1), 2.0)
+ assertEquals(unique(2), 3.0)
+ assertEquals(unique(3), 4.0)
+ val v2 = NArray[Double](1, 1, 1, 1, 1)
+ val unique2 = v2.unique
+ assertEquals(unique2.length, 1)
49
+ val v3 = NArray[Double]()
50
+ val unique3 = v3.unique
51
+ assertEquals(unique3.length, 0)
52
53
+ val v4 = NArray[Double](1, 2, 3, 4, 5)
54
+ val unique4 = v4.unique
55
+ assertEquals(unique4.length, 5)
56
57
58
59
test("Array horizontal sum") {
60
val v1 = NArray[Double](1.0, 2.0, 3.0)
61
val v2 = v1 * 2.0
vecxtensions/src/groupedOps.scala
0 commit comments