Ruud H.G. van Tol on Sun, 12 May 2024 10:20:43 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: select()ing a Map



On 2024-05-12 02:46, Ilya Zakharevich wrote:
I see that there is a request for a specification what should select()
do on a Map.

• In case when the second argument is a Map and flag is 0, the non-0
   values returned by the function f should be either all scalars, or
   all the same non-scalar type.

• In this case, the type of the non-0 values returned by f()
   determines the type returned by select() — when this makes sense.
   (Returning a scalar non-0 value is equivalent to returning a non-0
   Map.)

Hope this helps,
Ilya

Just showing some Map-related accessors and implicit transformations:

? {
  my( m= Map([ 9, "nine"; 6, "six"; [], "empty"; "two", 2; "one", 1; "ace", 42 ]) );
  print( "Map: ", m );                    /* the map, in some order */
  print( "Mat: ", Mat(m) );               /* same order */
  print( "Vec: ", Vec(m) );               /* the keys, same order */
  foreach( m, e, print("e_1: ", e[1]) );  /* other order */
}

Map: Map([6, "six"; 9, "nine"; [], "empty"; "ace", 42; "one", 1; "two", 2])

Mat: [6, "six"; 9, "nine"; [], "empty"; "ace", 42; "one", 1; "two", 2]

Vec: [6, 9, [], "ace", "one", "two"]

e_1: [[], "empty"]
e_1: [6, "six"]
e_1: [9, "nine"]
e_1: ["one", 1]
e_1: ["ace", 42]
e_1: ["two", 2]


-- Ruud